/**
 * 个人消息管理服务层
 */

// 模拟消息列表数据
const mockMessages = [
  {
    id: 'MSG-2025-1156',
    type: '紧急通知',
    title: '应急响应任务分配通知',
    content: '接应急指挥中心通知，现将应急响应任务分配如下：请您负责北区域的应急物资调配工作，务必在今日18:00前完成物资清点和分发准备工作。如有困难请及时反馈。',
    sender: '应急指挥中心 - 值班室',
    sendTime: '2025-11-05 09:30:00',
    priority: '高',
    isRead: false,
    replyStatus: '待回复',
    feedbackHistory: []
  },
  {
    id: 'MSG-2025-1148',
    type: '工作指示',
    title: '关于加强现场管控的工作要求',
    content: '根据当前疫情防控形势，要求所有现场工作人员必须严格执行以下规定：1.佩戴N95口罩和防护服；2.保持2米以上安全距离；3.每2小时进行一次消毒；4.严禁无关人员进入管控区域。请各位务必严格遵守。',
    sender: '现场指挥组 - 组长办公室',
    sendTime: '2025-11-04 16:20:00',
    priority: '高',
    isRead: false,
    replyStatus: '待回复',
    feedbackHistory: []
  },
  {
    id: 'MSG-2025-1139',
    type: '信息提醒',
    title: '本周工作总结提交提醒',
    content: '各位工作人员请注意，本周工作总结将于本周五17:00前提交至综合办公室。请详细记录本周工作完成情况、存在问题及下周工作计划。逾期未提交将影响本月绩效考核。',
    sender: '综合办公室',
    sendTime: '2025-11-04 10:00:00',
    priority: '中',
    isRead: true,
    replyStatus: '已回复',
    feedbackHistory: [
      {
        user: '我',
        content: '收到，本周五下午提交',
        time: '2025-11-04 10:15:00'
      }
    ]
  },
  {
    id: 'MSG-2025-1132',
    type: '工作指示',
    title: '流行病学调查协助通知',
    content: '接流调组通知，需要您协助完成密切接触者信息核实工作。请于今日12:00前核实以下5位密接人员的联系方式和居住地址，并将核实结果反馈至流调组。具体名单见附件。',
    sender: '流行病学调查组',
    sendTime: '2025-11-03 09:45:00',
    priority: '高',
    isRead: true,
    replyStatus: '已回复',
    feedbackHistory: [
      {
        user: '我',
        content: '已完成信息核实，5位密接人员信息已更新至系统',
        time: '2025-11-03 11:30:00'
      },
      {
        user: '流行病学调查组',
        content: '收到，感谢配合',
        time: '2025-11-03 11:35:00'
      }
    ]
  },
  {
    id: 'MSG-2025-1125',
    type: '系统通知',
    title: '系统升级维护通知',
    content: '为提升系统性能和用户体验，应急管理系统将于本周六（11月9日）凌晨2:00-6:00进行系统升级维护。维护期间系统将暂停服务，请各位提前做好工作安排，避免影响正常工作。',
    sender: '信息技术部',
    sendTime: '2025-11-02 15:30:00',
    priority: '中',
    isRead: true,
    replyStatus: '待回复',
    feedbackHistory: []
  },
  {
    id: 'MSG-2025-1118',
    type: '信息提醒',
    title: '防护物资领用通知',
    content: '本月防护物资已到货，请各位工作人员于本周内到后勤保障科领取。领用物资包括：N95口罩50个、防护服2套、护目镜1副、消毒液2瓶。请凭工作证领取，逾期不候。',
    sender: '后勤保障科',
    sendTime: '2025-11-02 08:20:00',
    priority: '低',
    isRead: true,
    replyStatus: '已回复',
    feedbackHistory: [
      {
        user: '我',
        content: '已领取，谢谢',
        time: '2025-11-02 14:00:00'
      }
    ]
  },
  {
    id: 'MSG-2025-1110',
    type: '紧急通知',
    title: '紧急集合通知',
    content: '接上级紧急通知，辖区内发现1例疑似病例。请所有应急响应人员立即到应急指挥中心集合，开展流调和管控工作。请在接到通知后30分钟内到达指定地点。',
    sender: '应急指挥中心',
    sendTime: '2025-11-01 20:15:00',
    priority: '高',
    isRead: true,
    replyStatus: '已回复',
    feedbackHistory: [
      {
        user: '我',
        content: '收到，马上出发',
        time: '2025-11-01 20:16:00'
      }
    ]
  },
  {
    id: 'MSG-2025-1102',
    type: '工作指示',
    title: '关于规范工作日志填写的通知',
    content: '近期发现部分工作人员工作日志填写不规范，存在漏填、错填等问题。现要求所有人员务必按照规定格式认真填写每日工作日志，包括工作时间、工作内容、工作成果等。综合办将进行不定期检查。',
    sender: '综合办公室',
    sendTime: '2025-10-31 14:00:00',
    priority: '中',
    isRead: true,
    replyStatus: '待回复',
    feedbackHistory: []
  },
  {
    id: 'MSG-2025-1095',
    type: '信息提醒',
    title: '在线培训课程提醒',
    content: '应急处置能力提升培训课程已上线，课程内容包括突发事件应急处理、个人防护要点、现场管控技巧等。请各位在本月底前完成学习并通过考核，培训证书将作为年度考核依据之一。',
    sender: '培训中心',
    sendTime: '2025-10-30 09:00:00',
    priority: '中',
    isRead: true,
    replyStatus: '已回复',
    feedbackHistory: [
      {
        user: '我',
        content: '已完成培训课程学习',
        time: '2025-10-31 16:00:00'
      }
    ]
  },
  {
    id: 'MSG-2025-1088',
    type: '系统通知',
    title: '密码安全提醒',
    content: '系统检测到您的账户密码已超过90天未更改，为保障账户安全，建议您尽快修改密码。修改密码时请注意：密码长度不少于8位，需包含大小写字母、数字和特殊字符。',
    sender: '系统管理员',
    sendTime: '2025-10-29 10:30:00',
    priority: '低',
    isRead: true,
    replyStatus: '待回复',
    feedbackHistory: []
  },
  {
    id: 'MSG-2025-1080',
    type: '信息提醒',
    title: '健康监测数据上报提醒',
    content: '请各位工作人员每日按时上报个人健康监测数据，包括体温、健康码状态等信息。连续3天未上报者将被暂停现场工作权限，直至补充完整健康监测数据。',
    sender: '医疗保障组',
    sendTime: '2025-10-28 08:00:00',
    priority: '中',
    isRead: true,
    replyStatus: '已回复',
    feedbackHistory: [
      {
        user: '我',
        content: '已按时上报健康数据',
        time: '2025-10-28 08:30:00'
      }
    ]
  },
  {
    id: 'MSG-2025-1072',
    type: '工作指示',
    title: '关于加强值班值守的通知',
    content: '鉴于当前疫情防控形势，要求所有应急人员加强值班值守工作。值班期间必须保持通讯畅通，确保能够第一时间响应突发情况。值班人员不得擅自离岗，如有特殊情况需提前向值班组长报告。',
    sender: '值班管理办公室',
    sendTime: '2025-10-27 16:00:00',
    priority: '高',
    isRead: true,
    replyStatus: '已回复',
    feedbackHistory: [
      {
        user: '我',
        content: '收到，严格遵守值班纪律',
        time: '2025-10-27 16:20:00'
      }
    ]
  }
];

// 模拟统计数据
let mockStatistics = {
  totalMessages: 12,
  unreadMessages: 2,
  repliedMessages: 7,
  pendingMessages: 5
};

// 模拟快速回复模板
const mockQuickReplyTemplates = [
  {
    id: 1,
    name: '已收到',
    content: '收到，我会尽快处理并及时反馈结果。'
  },
  {
    id: 2,
    name: '正在处理',
    content: '我已经在处理这件事情，预计今天下班前能够完成，请放心。'
  },
  {
    id: 3,
    name: '需要支援',
    content: '收到通知，但目前人手不足，需要额外支援才能按时完成任务。'
  },
  {
    id: 4,
    name: '已完成',
    content: '任务已经按要求完成，相关材料已上传至系统，请查收。'
  },
  {
    id: 5,
    name: '需要沟通',
    content: '关于这项工作有些细节需要进一步沟通确认，方便的话能否电话联系？'
  },
  {
    id: 6,
    name: '延期申请',
    content: '由于客观原因，可能无法按原定时间完成，能否申请延期至明天？'
  }
];

// 默认通知设置
const defaultNotificationSettings = {
  methods: {
    sms: true,
    push: true,
    email: false,
    call: true
  },
  timeRange: {
    start: '08:00',
    end: '22:00'
  },
  types: {
    emergency: true,
    warning: true,
    info: true,
    system: true
  },
  doNotDisturb: {
    enabled: false,
    startTime: '22:00',
    endTime: '08:00',
    emergencyOverride: true
  },
  sound: {
    tone: 'default',
    vibrate: true
  },
  frequency: {
    interval: 15
  },
  preferences: {
    autoRead: true,
    preview: true,
    badge: true
  }
};

// 当前通知设置（模拟存储）
let currentNotificationSettings = JSON.parse(JSON.stringify(defaultNotificationSettings));

/**
 * 获取消息列表
 */
export function getMessageList(params = {}) {
  return new Promise((resolve) => {
    setTimeout(() => {
      let results = [...mockMessages];

      // 按消息类型筛选
      if (params.type) {
        results = results.filter(m => m.type === params.type);
      }

      // 按已读状态筛选
      if (params.isRead !== undefined) {
        results = results.filter(m => m.isRead === params.isRead);
      }

      // 按回复状态筛选
      if (params.replyStatus) {
        results = results.filter(m => m.replyStatus === params.replyStatus);
      }

      // 按关键词搜索
      if (params.keyword) {
        const keyword = params.keyword.toLowerCase();
        results = results.filter(m => 
          m.title.toLowerCase().includes(keyword) ||
          m.content.toLowerCase().includes(keyword) ||
          m.sender.toLowerCase().includes(keyword)
        );
      }

      resolve(results);
    }, 400);
  });
}

/**
 * 获取消息统计数据
 */
export function getMessageStatistics() {
  return new Promise((resolve) => {
    setTimeout(() => {
      // 实时计算统计数据
      const stats = {
        totalMessages: mockMessages.length,
        unreadMessages: mockMessages.filter(m => !m.isRead).length,
        repliedMessages: mockMessages.filter(m => m.replyStatus === '已回复').length,
        pendingMessages: mockMessages.filter(m => m.replyStatus === '待回复').length
      };
      mockStatistics = stats;
      resolve(stats);
    }, 300);
  });
}

/**
 * 标记消息为已读
 */
export function markMessageAsRead(messageId) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const message = mockMessages.find(m => m.id === messageId);
      if (message) {
        message.isRead = true;
        resolve({ success: true, message: '已标记为已读' });
      } else {
        reject(new Error('消息不存在'));
      }
    }, 500);
  });
}

/**
 * 回复消息
 */
export function replyToMessage(messageId, content) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (!content || content.trim() === '') {
        reject(new Error('回复内容不能为空'));
        return;
      }

      const message = mockMessages.find(m => m.id === messageId);
      if (message) {
        message.replyStatus = '已回复';
        message.isRead = true;
        
        if (!message.feedbackHistory) {
          message.feedbackHistory = [];
        }
        
        message.feedbackHistory.push({
          user: '我',
          content: content,
          time: new Date().toLocaleString('zh-CN')
        });

        resolve({ 
          success: true, 
          message: '回复发送成功',
          data: message
        });
      } else {
        reject(new Error('消息不存在'));
      }
    }, 800);
  });
}

/**
 * 获取快速回复模板
 */
export function getQuickReplyTemplates() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve([...mockQuickReplyTemplates]);
    }, 300);
  });
}

/**
 * 获取消息详情
 */
export function getMessageDetail(messageId) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const message = mockMessages.find(m => m.id === messageId);
      if (message) {
        resolve(message);
      } else {
        reject(new Error('消息不存在'));
      }
    }, 400);
  });
}

/**
 * 批量标记消息已读
 */
export function batchMarkAsRead(messageIds) {
  return new Promise((resolve) => {
    setTimeout(() => {
      let successCount = 0;
      messageIds.forEach(id => {
        const message = mockMessages.find(m => m.id === id);
        if (message && !message.isRead) {
          message.isRead = true;
          successCount++;
        }
      });
      resolve({ 
        success: true, 
        message: `已标记 ${successCount} 条消息为已读`,
        count: successCount
      });
    }, 600);
  });
}

/**
 * 删除消息
 */
export function deleteMessage(messageId) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const index = mockMessages.findIndex(m => m.id === messageId);
      if (index > -1) {
        mockMessages.splice(index, 1);
        resolve({ success: true, message: '消息已删除' });
      } else {
        reject(new Error('消息不存在'));
      }
    }, 500);
  });
}

/**
 * 获取通知设置
 */
export function getNotificationSettings() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(JSON.parse(JSON.stringify(currentNotificationSettings)));
    }, 400);
  });
}

/**
 * 更新通知设置
 */
export function updateNotificationSettings(settings) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // 验证设置
      if (!settings) {
        reject(new Error('设置数据不能为空'));
        return;
      }

      // 验证至少有一个通知方式开启
      const hasMethod = Object.values(settings.methods).some(v => v);
      if (!hasMethod) {
        reject(new Error('至少需要开启一种通知方式'));
        return;
      }

      // 保存设置
      currentNotificationSettings = JSON.parse(JSON.stringify(settings));
      
      resolve({ 
        success: true, 
        message: '通知设置已更新',
        data: currentNotificationSettings
      });
    }, 800);
  });
}

/**
 * 获取默认设置
 */
export function getDefaultSettings() {
  return JSON.parse(JSON.stringify(defaultNotificationSettings));
}

/**
 * 测试通知
 */
export function testNotification(notificationType) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ 
        success: true, 
        message: `${notificationType}通知测试成功`
      });
    }, 1000);
  });
}

